<template>
  <h2>当前求和为:{{sum}}</h2>
  <button @click="sum++">点我+1</button>
  <hr>
  <h2>当前的信息为:{{msg}}</h2>
  <button @click="msg+='!'">修改信息</button>
  <hr>
  <h2>姓名：{{person.name}}</h2>
  <h2>年龄：{{person.age}}</h2>
  <h2>薪资：{{person.job.j1.salary}}K</h2>
  <button @click="person.name+='~'">修改姓名</button>
  <button @click="person.age++">增长年龄</button>
  <button @click="person.job.j1.salary++">涨薪</button>
</template>
  
<script>
  import {ref,reactive,watch,watchEffect} from 'vue'
  export default {
    name: 'Demo',
    // watch: {
    //   /* sum(newValue,oldValue){
    //     console.log('sum的值变化了',newValue,oldValue)
    //   }, */
    //   sum:{
    //     immediate: true,// 进入页面时立即执行一下
    //     deep: true,// 
    //     handler(newValue,oldValue){
    //       console.log('sum的值变化了',newValue,oldValue)
    //     }
    //   }
    // },  
    setup(props,context){
      // 数据
      let sum = ref(0)
      let msg = ref('你好')
      let person = reactive({
        name: '张三',
        age: 18,
        job: {
          j1: {
            salary: 20
          }
        }
      })


      // 这里监视的是sum的RefImpl对象，当对象里面的value（sum的值是0）发生变化时，就会被监听到
      watch(sum,(newValue,oldValue)=>{
        console.log('sum的值变化了',newValue,oldValue)
      },{immediate:true})

      watchEffect(()=>{
        // 当用到的变量发生变化时，就会触发该函数
        const x1 = sum.value
        const x2 = person.job.j1.salary
        console.log('watchEffect所指定的回调指定了')
      })



      // 返回一个对象（常用）
      return {
        sum,
        msg,
        person
      }
  
    }
  
  }
  </script>
  
  
  